package com.suiwei.advanced.collection;

import com.suiwei.base.common.Student;
import com.suiwei.base.common.Student2;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.function.BiConsumer;
import org.junit.jupiter.api.Test;

/**
 * @author suiwei
 * @date 2025/8/23 22:16
 */
public class MapDemo {
    @Test
    void mapTest(){
        Map map = new HashMap<>();
        map.put("张三",25);
        map.put("张三",26);//添加或者修改（键重复了，就会修改值）
        map.remove("张三");//删除
        map.clear();//清空
        map.isEmpty();//判断是否为空
        map.size();//集合长度
        map.containsKey("张三");//是否包含key
        map.containsValue(25);//是否包含value
    }
    //TreeMap：可以对键进行排序（键必须实现Comparable接口才能比较排序）
    @Test
    void treeMapTest(){
        TreeMap tm = new TreeMap<>();
        tm.put(new Student("1","tom"),1);//java.lang.ClassCastException: com.suiwei.base.common.Student cannot be cast to java.lang.Comparable
        tm.put(new Student2(1,"tom"),1);
    }
    //有序
    @Test
    void linkedHashMap(){

    }
    //----------------------------map遍历-------------------------
    void traversalTest(){
        HashMap<Integer,String> hm = new HashMap();
        hm.put(1,"tom");
        hm.put(2,"jerry");

        //1.通过键找值
        Set<Integer> set = hm.keySet();
        for (Integer integer : set) {
            hm.get(integer);
        }

        //2.通过键值对对象获取键和值
        //key+value：这个整体我们称之为“键值对”，“键值对对象”，在java中使用Entry对象表示
        //Entry是Map集合的内部类
        Set<Map.Entry<Integer, String>> entries = hm.entrySet();
        for (Map.Entry<Integer, String> entry : entries) {
            entry.getKey();
            entry.getValue();
        }

        // 3.foreach
        hm.forEach(
            //匿名内部类
            new BiConsumer<Integer, String>() {
              @Override
              public void accept(Integer integer, String s) {
                System.out.println(integer);
              }
        });
        // 3.foreach-lambda
        hm.forEach(
            (integer, s) -> {
              System.out.println(s);
            });
    }


}
